import { useCallback, useRef, useState } from 'react';
import { isFunction } from '../utils'; // 假设这是一个提供 isFunction 方法的 JavaScript 文件

function useRefState(initialState) {
  const [state, setState] = useState(initialState);
  const ref = useRef(state);

  // 注意：在原始 TypeScript 代码中，setRafState 的依赖项数组 [state] 是不正确的，
  // 因为 state 是一个响应式状态，它的变化会导致 setRafState 重新创建，
  // 这通常不是我们想要的效果。在 JavaScript 版本中，我们将移除这个依赖项数组。
  const setRafState = useCallback((patch) => {
    setState(prevState => {
      // eslint-disable-next-line no-return-assign
      ref.current = isFunction(patch) ? patch(prevState) : patch;
      return ref.current;
    });
  }, []); // 空依赖项数组意味着 setRafState 只在组件首次渲染时创建一次

  return [state, setRafState, ref];
}

export default useRefState;
